1. Field of the Invention
The present invention relates in general to networking, and more specifically, to management of transmit descriptors in networks.
2. Background of the Invention
Networks are commonly used today for exchange of information. Typically, in a network environment, data is transmitted and received via a network interface (may also be referred to as a network interface card or network adapter). The network interface adapter provides network connectivity to a computing system or device. A transport protocol (for example TCP/IP) is commonly used for providing reliable transfer of data between two nodes on a given network.
A node on a network is typically a computer (or any device), which can have several network interfaces to interface with plural types of networks. In order to transmit data on a network, the operating system (OS) of the computing system (or networked device) delivers data (or packet/frame) to a network interface device driver (may also be referred to as a driver). The driver interfaces the computing system with the network adapter. For each block of data that is to be transmitted, the driver maintains a software structure called a transmit descriptor. Typically, the transmit descriptors are allocated from a pre-allocated pool of buffers for performance.
When the network device driver is given data for transmission, it allocates a transmit descriptor from the pre-allocated pool and associates it with the data. The Transmit Descriptor is released back to the pool once data is transmitted on the wire.
Typical network traffic caters to both slow and fast connections. The transmit descriptors for slower connections take longer to process than faster connections, i.e. slower connection transmit descriptors get released later compared to faster connection related transmit descriptors. Hence, a slower connection can hold up transmit descriptors, which can cause faster connections to slow down due to lack of available transmit descriptors.
In another situation, consider a connection between an endpoint A and endpoint B. If endpoint B fails, it will take a finite amount of time for A to detect B's failure. During this time, the transmit descriptors allocated for endpoint A are held up.
Both the foregoing conditions can result in starvation for faster connections due to depletion of common resources (i.e. the transmit descriptors). Therefore, what is needed is a method and system for managing the transmit descriptors by dynamically allocating transmit descriptors based on traffic volume and connection speeds.